package cn.wlj.origin.simple;

import cn.wlj.origin.ConnectUtil;
import cn.wlj.origin.Constant;
import com.rabbitmq.client.*;

import java.io.IOException;

/**
 * @ClassName Receiver
 * @Description TODO 简单模式的消息接收者
 * @Author WLJ
 * @Date 2024/1/9 20:49
 * @Version 1.0
 */
public class Receiver {
    public static void main(String[] args) throws Exception {
        // 获取连接
        Connection connection = ConnectUtil.getConnection();
        // 获取信道
        Channel channel = connection.createChannel();
        // 队列名称
        String queueName = Constant.Simple.QUEUE_NAME;
        // 声明队列
        /**
         * queueName队列名
         * durable   是否持久化
         * exclusive是否独占，独占状态下其他链接无法使用
         * autoDelete  自动删除，在处理结束后自动删除消息
         * arguments，其他参数，map类型
         */
        channel.queueDeclare(queueName, false, false, true, null);
        // 接收的回调函数
        DeliverCallback deliverCallback = ((s, delivery) ->{
           //接收消息的处理逻辑
            String msg = new String(delivery.getBody(),"UTF-8");
            System.out.println("接收消息："+msg);
        });
        // 接收错误的回调
        CancelCallback cancelCallback = (s -> {
            System.out.println("接收消息异常");
        });
        channel.basicConsume(queueName, deliverCallback, cancelCallback);
        Thread.sleep(5000);
    }
}
